package code1.stack_and_queue;

import java.util.Stack;

/**
 * 原题链接：https://leetcode.cn/problems/evaluate-reverse-polish-notation/
 */
public class P150 {
    //后缀表达式求值
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack=new Stack<>();
        for(int i=0;i<tokens.length;i++){
            if((!tokens[i].equals("+")) && (!tokens[i].equals("-")) && (!tokens[i].equals("*")) && (!tokens[i].equals("/"))){
                //扫描到数字，直接入栈
                stack.push(Integer.parseInt(tokens[i]));
            }else{
                //扫描到运算符，弹出两元素并将计算结果重新压入栈中
                int right=stack.pop();
                int left=stack.pop();
                if(tokens[i].equals("+")){
                    int res=left+right;
                    stack.push(res);
                }else if(tokens[i].equals("-")){
                    int res=left-right;
                    stack.push(res);
                }else if(tokens[i].equals("*")){
                    int res=left*right;
                    stack.push(res);
                }else if(tokens[i].equals("/")){
                    int res=left/right;
                    stack.push(res);
                }
            }
        }
        return stack.pop();     //最终返回栈顶元素
    }
}
